package com.alex.monitor.core.alarm;

import com.alex.monitor.core.annotation.MethodMonitor;
import com.alex.monitor.core.annotation.TimeMethodMonitor;
import java.lang.reflect.Method;

/**
 * 报警器顶层定义
 *
 * @author Alex.Liu
 * @date: 2025-02-16 15:35
 * @since 1.0.0
 */
public interface MonitorAlarm {

    /**
     * 返回值预警
     *
     * @param method     触发的方法
     * @param annotation 方法注解信息
     * @param result     方法返回值
     */
    void alarmObj(Method method, MethodMonitor annotation, Object result);

    /**
     * 异常预警
     *
     * @param method     触发的方法
     * @param annotation 方法注解信息
     * @param ex         方法抛出异常
     */
    void alarmEx(Method method, MethodMonitor annotation, Throwable ex);

    /**
     * 耗时预警
     *
     * @param method     调用方法
     * @param annotation 方法注解
     * @param timeCost   方法耗时
     */
    void alarmTimeout(Method method, TimeMethodMonitor annotation, long timeCost);

}